import time,random,copy


login_userindex = -1  # 用户的下标
max_pw = 3  # 账号密码最大尝试次数


def read_user():
    user = open(file="../user", mode="r", encoding='utf8')
    read_user = user.readlines()
    user.close()

    for i in range(len(read_user)):
        read_user[i] = read_user[i].split(',')
        read_user[i][3] = int(read_user[i][3])

    return read_user

user_list=read_user()
print(read_user())



def write_user():
    user=copy.deepcopy(user_list)
    user_write = open(file="../user", mode="w", encoding="utf8")
    for u in range(len(user)):
        user[u][3] = str(user[u][3])
        user[u] = ",".join(user[u])

    user_write.writelines(user)
    user_write.close()


def check_user(username):
    """
    查询用户名的下标，查询不到是 -1
    :param userName: 用户名
    :return: 用户的下标值,查询不到是 -1
    """
    print(user_list)
    for index, user in enumerate(user_list):
        if user[0] == username:
            return index
    else:  # 如果没有遇到break都会执行！
        return -1


def query():
    """print用户余额，然后返回！"""

    print(f"你的余额是:{user_list[login_userindex][3]}元.")  #
    # 回到主菜单
    main_menu()


def withdraw():
    """
    取款: 判断余额不足
    记录日志
    执行完后返回
    """
    balance = user_list[login_userindex][3]
    print(balance)
    money=int(input('请输入取款金额：'))
    if money<=0 or balance < money or money%50 != 0:
        print('请输入正确金额.')
    else:
        user_list[login_userindex][3] = balance - money
        print(f'恭喜，成功取款{money}元，当前余额为{user_list[login_userindex][3]}元.')
        now = time.strftime('%Y-%m-%d %H:%M:%S')
        user_list[login_userindex][4] += str(f'{now}：成功取款{money}元，余额为{user_list[login_userindex][3]}元.\t')
        write_user()
    main_menu()  # 直接回主菜单。


def deposite():
    """
    存款：判断不能是负数
    记录日志
    执行完成后返回
    """
    balance = user_list[login_userindex][3]
    print(balance)
    money = int(input('请输入存款金额：'))
    if money <= 0 or money % 50 != 0:
        print('请输入正确金额.')
    else:
        user_list[login_userindex][3] = balance + money
        print(f'恭喜，成功存款{money}元，当前余额为{user_list[login_userindex][3]}元.')
        now = time.strftime('%Y-%m-%d %H:%M:%S')
        user_list[login_userindex][4] += str(f'{now}：成功存款{money}元，余额为{user_list[login_userindex][3]}元.\t')
        write_user()
    main_menu()  # 回到主菜单


def transer():
    """
    转账：判断 转账人是否存在， 余额是否足够。
    记录日志：两个人都需要记录。
    执行完成后返回
    """
    balance = user_list[login_userindex][3]
    username=input('请输入转入用户名：')
    index=check_user(username)
    if index >= 0:
        money=int(input('请输入转账金额：'))
        if money<=0 or balance < money or money%50 != 0:
            print('请输入正确金额.')
        else:
            user_list[login_userindex][3] = balance - money
            user_list[index][3] += money
            print(f'成功转账{money}元，当前余额为{user_list[login_userindex][3]}元.')
            now = time.strftime('%Y-%m-%d %H:%M:%S')
            user_list[login_userindex][4] += str(f'{now}：成功转账给{username}{money}元，余额为{user_list[login_userindex][3]}元.\t')
            user_list[index][4] += str(f'{now}：成功收到{user_list[login_userindex][0]}转账{money}元，余额为{user_list[index][3]}元.\t')
            write_user()

    main_menu()  # 回到主菜单


def history_write(user_index=login_userindex, logs=""):
    """
    流水：字符串记录，用\n分割
    """
    u=user_index
    user_list[user_index][4] += logs + "\n"


def history_read():
    """打印流水"""
    print(user_list[login_userindex][4])
    main_menu()  # 打印完了回到主菜单


def star_menu():
    """
    开始菜单
    :return: None
    """
    print("欢迎来到WoniuATM".center(83, "*"))
    print("请选择操作菜单".center(81, "*"))
    print("1.注册  2.登录  3.退卡".center(83, "*"))
    option = input("请输入你的操作选项：")
    if option == "1":
        reg()  # 注册功能
    elif option == "2":
        login()  # 登录功能
    elif option == "3":
        exit("谢谢,欢迎下次光临。")  # 结束程序运行，括号中的内容是，结束时的提示符。
    else:
        print("指令错误，重新选择。")
        star_menu()


def main_menu():
    """
    登录成功后的菜单
    :return: None
    """
    print("请选择操作菜单".center(81, "*"))
    print("1.查询 2.取款 3.存款 4.转账 5.流水 6.返回 7.退卡".center(75, "*"))
    option = input("请输入你的操作选项：")
    if option == "1":
        query()
    elif option == "2":
        withdraw()
    elif option == "3":
        deposite()
    elif option == "4":
        transer()
    elif option == "5":
        history_read()
    elif option == "6":
        star_menu()
    elif option == "7":
        exit("再见，欢迎下次光临。")
    else:
        print("你输入的选项有误，请重新选择！")
        main_menu()


def reg():
    """
    注册菜单： 判断是否存在用户名。
    不存在则可以添加用户名。
    """
    username = input("请输入用户名[注册]:")
    if check_user(username) >= 0:
        print('你注册的用户名已经存在.')
        reg()
    else:
        print('恭喜你，用户名可用.')
        password = input('请输入密码[注册]:')
        phone = input('请输入电话号码[注册]:')
        user_list.append([username,password,phone,random.randint(1000,5000),'','\n'])

        print('恭喜你，注册成功.')


        write_user()
        print(user_list)
        time.sleep(1)

        print(read_user())
        star_menu()


def login():
    """
    登录: 最大三次机会，
    """
    global login_userindex,max_pw

    while max_pw > 0:
        username = input("请输入用户名[登录]:")

        index = check_user(username)
        if index >=0:
            password = input('请输入密码[登录]:')
            max_pw -= 1
            if user_list[index][1] == password:
                print('恭喜你，登录成功.')
                login_userindex=index
                main_menu()
            else:
                print('抱歉，密码输入错误.')
        else:
            print('抱歉，登录用户名不存在.')
    star_menu()  # 主菜单


star_menu()  # 启动的位置。
